package com.zfei.gfb.api;


import com.zfei.gfb.api.domain.StatsValue;
import com.zfei.gfb.bean.StatusException;

import java.util.List;

/**
 * 统计服务
 *
 * @author fgh
 */
public interface StatsService {

    /**
     * 设置统计值
     *
     * @param value 统计值
     * @return 数量
     */
    int set(StatsValue value) throws StatusException;

    /**
     * 增加统计值
     *
     * @param value 统计值
     * @return 数量
     */
    int inc(StatsValue value) throws StatusException;

    /**
     * 减少统计值
     *
     * @param value 统计值
     * @return 数量
     */
    int dec(StatsValue value) throws StatusException;

    /**
     * 批量设置统计值
     *
     * @param values 统计值列表
     * @return 数量
     */
    int set(List<StatsValue> values) throws StatusException;

    /**
     * 批量增加统计值
     *
     * @param values 统计值列表
     * @return 数量
     */
    int inc(List<StatsValue> values) throws StatusException;

    /**
     * 批量减少统计值
     *
     * @param values 统计值列表
     * @return 数量
     */
    int dec(List<StatsValue> values) throws StatusException;

    /**
     * 获取统计值
     *
     * @param id  ID
     * @param tag 标签
     * @return 统计值
     */
    StatsValue get(String id, String tag) throws StatusException;

    long getSumByTag(String tag) throws StatusException;
    /**
     * 浏览统计数据
     *
     * @param ids ID列表
     * @return 统计数据
     */
    List<StatsValue> list(List<String> ids) throws StatusException;

    /**
     * 数据埋点（伏羲）
     *
     * @param data 埋点字段
     */
    void track(Object... data);
}
